package com.android.support.lib.universal.view.refresh;

import com.android.support.lib.universal.R;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HeaderViewListAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * 注意如果出现HeaderViewListAdapter转换异常，
 * 那么请使用RefreshLvLayout中的setAdapter函数为ListView设置Adapter
 * ，这样可以确保在设置Adapter之前已经添加了Footer。
 * 
 * 不能确保百分比，但比父类要稳定。
 * 
 * 使用说明：其它的和父类使用一致
 * 首次调用：swipeLayout.setAdapter(adapter, list);//添加适配器 和 listView控件，
 * RefreshLvLayout布局里面有ListView,其实是可以自动查询ListView控件的，但是为了防止找不到listView，所以首次初始化调用传参listView控件
 * 其后上拉刷新时调用：
 * swipeLayout.setAdapter(adapter);swipeLayout.setRefreshing(false);
 * 
 * 布局:ListView必不可少
 * <com.android.support.lib.universal.view.refresh.RefreshLvLayout
 * android:id="@+id/swipe_container" android:layout_width="match_parent"
 * android:layout_height="match_parent"
 * android:layout_below="@+id/linearLayout1" >
 * 
 * <ListView android:id="@+id/list" android:layout_width="match_parent"
 * android:layout_height="match_parent" android:divider="@color/boundary"
 * android:dividerHeight="1.0px"> </ListView>
 * </com.android.support.lib.universal.view.refresh.RefreshLvLayout>
 * 
 * @author 彭治铭
 *
 */
public class RefreshLvLayout extends RefreshLayout {

	public RefreshLvLayout(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		mListViewFooter = LayoutInflater.from(context).inflate(
				R.layout.lib_refreshlayout_footer, this, false);
	}

	public RefreshLvLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		mListViewFooter = LayoutInflater.from(context).inflate(
				R.layout.lib_refreshlayout_footer, null, false);
	}

	/**
	 * ListView的加载中footer
	 */
	protected View mListViewFooter;

	/*
	 * 设置ListView的adapter之前先添加footer,
	 * 避免footer的添加在设置adapter之后出现的转换到HeaderViewListAdapter的异常
	 * 
	 * @see
	 * com.uit.pullrefresh.swipe.RefreshLayout#setAdapter(android.widget.ListAdapter
	 * )
	 */
	public void setAdapter(ListAdapter adapter) {
		if (mListView.getFooterViewsCount() == 0) {
			mListView.addFooterView(mListViewFooter);
		}
		mListView.setAdapter(adapter);
		// 添加只是为了在ListView的setAdapter方法时将Adapter包装成HeaderViewListAdapter。因此并不需要footer，因此添加后再移除,
		mListView.removeFooterView(mListViewFooter);
	}

	public void setAdapter(ListAdapter adapter, ListView list) {
		if (mListView == null) {
			mListView = list;
			mListView.setOnScrollListener(this);
		}
		if (mListView.getFooterViewsCount() == 0) {
			mListView.addFooterView(mListViewFooter);// 必须在setAdapter之前添加尾布局
		}
		mListView.setAdapter(adapter);
		// 添加只是为了在ListView的setAdapter方法时将Adapter包装成HeaderViewListAdapter。因此并不需要footer，因此添加后再移除,
		mListView.removeFooterView(mListViewFooter);
	}

	@Override
	public void setLoading(boolean loading) {
		super.setLoading(loading);
		if (isLoading && mListView.getFooterViewsCount() == 0) {
			mListView.addFooterView(mListViewFooter);
		} else {
			if (mListView.getAdapter() instanceof HeaderViewListAdapter) {
				mListView.removeFooterView(mListViewFooter);
			} else {
				mListViewFooter.setVisibility(View.GONE);
			}
			mYDown = 0;
			mLastY = 0;
		}
	}

}
